/**
 * 1. 对象类型—— 接口
 * 在面向对象语言中，接口（Interfaces）是一个很重要的概念，它是对行为的抽象，而具体如何行动需要由类（classes）去实现
 * */

interface PersonT {
  name: string;
  age: number;
  [propname: string]: any; // 可以多/少的 任意 一个属性
}

// 约束了 tom 的形状必须和接口 Person 一致; 少一个 多一个 属性 都不被允许；但是可以用过 属性 any值
let tom: PersonT = {
  name: 'tom',
  age: 18,
};

/**
 *  2. 只读属性。readonly 第一次负值后 不能更改
 * 注意，只读的约束存在于第一次给对象赋值的时候，而不是第一次给只读属性赋值的时候：
 * */
interface PersonI {
  readonly id: number;
  name: string;
  age: number;
}

let Liang: PersonI = {
  id: 8888, // 不能改
  name: 'lili',
  age: 22,
}


